package app

import (
	"fmt"
	"github.com/spf13/cobra"
	"github.com/spf13/viper"
	"os"
	"path/filepath"
	"strings"
)

const (
	// 定义存放配置文件的目录
	pathDir = "./config"
	// 定义配置文件名称
	defaultConfigFileName = "config.yaml"
)

// 初始化配置文件
func initvipConfig() {
	// 如果启动命令存在配置文件，则从命令行选项指定的配置文件中读取
	if cfgFile != "" {
		// 从命令行选项指定的配置文件中读取
		viper.SetConfigFile(cfgFile)
	} else {
		// 获取当前用户的项目主目录
		home, err := os.UserHomeDir()
		// 如果获取失败，则退出程序并打印错误
		cobra.CheckErr(err)
		joinPath := filepath.Join(home, pathDir)
		// 设置配置文件路径，并且拼接主目录
		viper.AddConfigPath(joinPath)
		// 把当前目录也添加进来
		viper.AddConfigPath(pathDir)
		// 设置加载的配置文件类型
		viper.SetConfigType("yaml")
		viper.SetConfigName(defaultConfigFileName)
	}
	viper.SetEnvPrefix("CONFIG")
	viper.AutomaticEnv()
	// 设置一个替换的正则表达式
	replacer := strings.NewReplacer(".", "_")
	// 设置环境变量前缀
	viper.EnvKeyReplacer(replacer)
	// 读取失败
	if err := viper.ReadInConfig(); err != nil {
		fmt.Println("当前读取配置文件失败", err.Error())

	}
	fmt.Println("当前读取配置文件成功:", viper.ConfigFileUsed())
}
